#!/usr/bin/perl
# file: gab1.pl
# warn: this doesn't really work
use strict;
use IO::Socket qw(:DEFAULT :crlf);

my $host = shift or die "Usage: gab1.pl host [port]\n";
my $port = shift || 'echo';

my $socket = IO::Socket::INET->new(PeerAddr => $host,
                    PeerPort => $port)
    or die "Can't connect: $!";

my ($from_server, $from_usr);
LOOP:
while(1){
    {   # localize change to $/
        local $/ = CRLF;
        last LOOP unless $from_server = <$socket>;
        chomp $from_server;
    }
    print $from_server. "\n";
    
    last unless $from_usr = <>;
    chomp($from_usr);
    print $socket $from_usr, CRLF;
}
=pod
远程服务器大多使用CRLF，而本地用户约定键入的新行，所以需要不停的切换 $/ 。
所以使用local 局部化设置$/。

但是这个程序有一个明显的问题，只能处理服务器的单行输出，无法跟上多行

如果将从服务器读取改成下面的样子：
while($from_server = <$socket>){
    chomp $from_server;
    print $from_server, "\n";
}
这样会使事情更糟糕，脚本从服务器读取第一行后就挂起。
FTP服务器等待发送指令，但是脚本等待服务器的另一行，它不提醒我们键入命令，这样进入了死锁。
=cut